<?php

namespace Jinxing\Admin\Traits;

use Illuminate\Support\Arr;

/**
 * Trait JsonTrait json 数据返回
 *
 * @package Jinxing\Admin\Traits
 */
trait JsonTrait
{
    /**
     * 返回 json 数据信息
     *
     * @param array $params 返回数据信息
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function json($params = [])
    {
        // 处理提示信息
        if (empty($params['msg'])) {
            $params['msg'] = trans('error.' . Arr::get($params, 'code'));
        }

        // 处理返回 data 中的信息
        if (empty($params['data'])) {
            $params['data'] = (object)[];
        }

        return response()->json($params, 200, [], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
    }

    /**
     * 处理成功返回
     *
     * @param mixed|array $data 返回数据信息
     * @param string      $msg  提示信息，默认为空
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function success($data = null, $msg = '')
    {
        $code = 0;
        return $this->json(compact('code', 'msg', 'data'));
    }

    /**
     * 处理错误信息返回
     *
     * @param int    $code 错误码
     * @param string $msg  提示信息，默认为空
     * @param mixed  $data 数据信息
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function error($code = 10001, $msg = '', $data = null)
    {
        return $this->json(compact('code', 'msg', 'data'));
    }

    /**
     * 系统错误
     *
     * @param string $msg  提示错误信息
     * @param mixed  $data 提示数据信息
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function systemError($msg, $data = null)
    {
        return $this->error(10005, $msg, $data);
    }
}
